namespace lucere.index.read
{
    /// <summary>
    /// Provides access to stored term vector of a document field.  The vector consists 
    /// of the name of the field, an array of the terms that occur in the field of the
    /// Document and a parallel array of frequencies.  Thus, getTermFrequencies()[5] 
    /// corresponds with the frequency of getTerms()[5], assuming there are at least 
    /// 5 terms in the Document.
    /// </summary>
    public interface ITermFrequencyVector
    {     
        /// <summary>
        /// The Fieldable name. The name of the field this vector is associated with.
        /// </summary>
        /// <returns></returns>
        string Field { get; }

        
        /// <summary>
        /// The number of terms in the term vector.
        /// </summary>
        int Size { get; }

        /// <summary>
        /// An Array of term texts in ascending order.
        /// </summary>
        /// <returns></returns>
        string[] Terms { get; }

        /// <summary>
        /// Array of term frequencies. Locations of the array correspond one to one to the 
        /// terms in the array obtained from <code>getTerms</code>method. Each location in 
        /// the array contains the number of times this term occurs in the document or the 
        /// document field.
        /// </summary>
        /// <returns></returns>
        int[] TermFrequencies { get; }


        /// <summary>
        /// Return an index in the term numbers array returned from 
        /// <ode>Terms</code> at which the term with the specified <code>term</code> 
        /// appears. If this term does not appear in the array, return -1.
        /// </summary>
        /// <param name="term"></param>
        /// <returns></returns>
        int IndexOf(string term);

        /// <summary>
        /// Just like <code>indexOf(int)</code> but searches for a number of terms at the same time. Returns an array that has the same size as the number of terms searched for, each slot containing the result of searching for that term number.
        /// </summary>
        /// <param name="terms">array containing terms to look for</param>
        /// <param name="start">index in the array where the list of terms starts</param>
        /// <param name="len">the number of terms in the list</param>
        /// <returns></returns>
        int[] IndexesOf(string[] terms, int start, int len);
    }
}